package l_chain_of_responsibility.b_design_pattern;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by wug on 2016/8/9 0009.
 */
public class FilterChain implements Handler {
    //用List集合来存储过滤规则
    List<Handler> filters = new ArrayList<Handler>();
    //用于标记规则的引用顺序
    int index=0;

    //往规则链条中添加规则
    public FilterChain addFilter(Handler f) {
        filters.add(f);
        //代码的设计技巧:Chain链添加过滤规则结束后返回添加后的Chain，方便我们下面doFilter函数的操作
        return this;
    }

    @Override
    public void doFilter(Request request,Response response,FilterChain chain){
        /**
         * 从第一个开始执行所有的handler
         */
        while(index < filters.size()) {
            //每添加一个过滤规则，index自增1
            Handler f=filters.get(index);
            index++;
            //根据索引值获取对应的规律规则对字符串进行处理
            f.doFilter(request, response, chain);
        }
    }
}
